package fr.toto.subtitles;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.TreeSet;

import com.kokotchy.betaSeriesAPI.model.SubtitleLanguage;

import fr.toto.comparators.SoutitreComparator;
import fr.toto.constantes.Constantes;
import fr.toto.exceptions.ProcessException;

public class SoutitreSet implements Constantes {

	private static TreeSet<Soutitre> s = new TreeSet<Soutitre>(
			new SoutitreComparator());

	public static void add(Soutitre st) {
		s.add(st);
	}

	public static synchronized void Save() {
		try {
			if (DEBUG) {
				System.out.print(DEBUGMSG.getString("saveAllSub"));
			}
			ObjectOutputStream out = new ObjectOutputStream(
					new FileOutputStream(LISTSUBPATH.toString()));
			out.writeObject(s);
			out.close();
		} catch (Exception e) {
			new ProcessException(e);
		}

	}

	public static synchronized void Load() {
		try {
			if (DEBUG)
				System.out.print(DEBUGMSG.getString("loadALLSub"));

			ObjectInputStream in = new ObjectInputStream(new FileInputStream(
					LISTSUBPATH.toString()));
			@SuppressWarnings("unchecked")
			TreeSet<Object> list = (TreeSet<Object>) in.readObject();
			in.close();
			for (Object ob : list) {
				if ((ob instanceof Soutitre)) {
					s.add((Soutitre) ob);
				} else {
					// permet de garder la compatibilité avec l'ancien fichier
					// de soustitre
					if (ob instanceof triseries.Soutitre) {
						Soutitre Sub = ((triseries.Soutitre) ob).copy();
						s.add(Sub);
					}
				}
			}

			if (DEBUG) {
				for (Soutitre st : s) {
					System.out.println(" - " + st.toString());
				}
			}
		} catch (Exception e) {
			s = new TreeSet<Soutitre>(new SoutitreComparator());
			new ProcessException(e);
		}

	}

	public static synchronized Soutitre extraitSoutitre(String url, int se,
			int ep, SubtitleLanguage lang) {
		for (Soutitre soutitre : s) {
			if (soutitre.equals(url, se, ep, lang)) {
				s.remove(soutitre);
				return soutitre;
			}
		}
		return null;
	}

	public static void remove(Soutitre soutitre) {
		s.remove(soutitre);
	}

	public static synchronized Object[] ListATraiter() {
		return s.toArray();
	}

}
